<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
        <span
          style="color: red;">"说明：1、本表财政支出结余应为0，非财政收入中技术服务收入、成果转化收入、科研副产品收入均填报真实测算收入，因预算上报为平衡预算，可与预算收入明细表中的预算收入不一致，本表测算产生的收支结余仅作为后续管理参考依据；
          2、填报举例：维修费：如维修大门3.5万，测算内容：大门维修；测算依据：说明3.5万金额是如何测算出来的；
          3、各单位科室只需测算基本公用经费，与非财政收入相关的经费支出不按科室测算，即各科室（基本）=财政基本+非财政基本；
          4、各项支出科目可按报账规范要求进行具体测算 。"
        </span>
        <span style="color: red;">单位：万元
        </span>
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="年度" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="nd">
              <j-dict-select-tag type="list" v-model="model.nd" dictCode="year" placeholder="请选择年度"
                @change="handleYearChange" />
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="项目类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="xmlx">
              <a-select v-model="model.xmlx" placeholder="请选择项目类型" @change="handleTypeChange">
                <a-select-option value="财政">财政</a-select-option>
                <a-select-option value="非财政">非财政</a-select-option>
              </a-select>
            </a-form-model-item>
          </a-col>
          <!-- 费用表单项 -->
          <a-col :span="24">
            <a-form-model-item label="办公费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bgf">
              <a-input v-model="model.bgf" placeholder="请输入办公费" @blur="validateFee('bgf')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="印刷费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ys">
              <a-input v-model="model.ys" placeholder="请输入印刷费" @blur="validateFee('ys')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="手续费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sx">
              <a-input v-model="model.sx" placeholder="请输入手续费" @blur="validateFee('sx')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="水费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sf">
              <a-input v-model="model.sf" placeholder="请输入水费" @blur="validateFee('sf')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="电费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="df">
              <a-input v-model="model.df" placeholder="请输入电费" @blur="validateFee('df')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="邮电费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="yd">
              <a-input v-model="model.yd" placeholder="请输入邮电费" @blur="validateFee('yd')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="取暖费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qn">
              <a-input v-model="model.qn" placeholder="请输入取暖费" @blur="validateFee('qn')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="物业管理费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="wy">
              <a-input v-model="model.wy" placeholder="请输入物业管理费" @blur="validateFee('wy')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="差旅费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="cl">
              <a-input v-model="model.cl" placeholder="请输入差旅费" @blur="validateFee('cl')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="因公出国（境）费用" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="cg">
              <a-input v-model="model.cg" placeholder="请输入因公出国（境）费用" @blur="validateFee('cg')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="维修（护）费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="wx">
              <a-input v-model="model.wx" placeholder="请输入维修（护）费" @blur="validateFee('wx')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="租赁费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zl">
              <a-input v-model="model.zl" placeholder="请输入租赁费" @blur="validateFee('zl')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="会议费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="hy">
              <a-input v-model="model.hy" placeholder="请输入会议费" @blur="validateFee('hy')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="培训费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="px">
              <a-input v-model="model.px" placeholder="请输入培训费" @blur="validateFee('px')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="公务接待费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="gwjd">
              <a-input v-model="model.gwjd" placeholder="请输入公务接待费" @blur="validateFee('gwjd')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="专用材料费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ztcl">
              <a-input v-model="model.ztcl" placeholder="请输入专用材料费" @blur="validateFee('ztcl')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="被装购置费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bz">
              <a-input v-model="model.bz" placeholder="请输入被装购置费" @blur="validateFee('bz')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="专用燃料费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zyrl">
              <a-input v-model="model.zyrl" placeholder="请输入专用燃料费" @blur="validateFee('zyrl')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="劳务费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lw">
              <a-input v-model="model.lw" placeholder="请输入劳务费" @blur="validateFee('lw')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="委托业务费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="wt">
              <a-input v-model="model.wt" placeholder="请输入委托业务费" @blur="validateFee('wt')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="工会经费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="gh">
              <a-input v-model="model.gh" placeholder="请输入工会经费" @blur="validateFee('gh')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="公务用车运行维护费" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="gw">
              <a-input v-model="model.gw" placeholder="请输入公务用车运行维护费" @blur="validateFee('gw')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="其他交通费用" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qtjt">
              <a-input v-model="model.qtjt" placeholder="请输入其他交通费用" @blur="validateFee('qtjt')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="税金及附加费用" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sj">
              <a-input v-model="model.sj" placeholder="请输入税金及附加费用" @blur="validateFee('sj')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="其他商品和服务支出" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qtsp">
              <a-input v-model="model.qtsp" placeholder="请输入其他商品和服务支出" @blur="validateFee('qtsp')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="房屋建筑物购建" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fw">
              <a-input v-model="model.fw" placeholder="请输入房屋建筑物购建" @blur="validateFee('fw')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="办公设备购置" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bg">
              <a-input v-model="model.bg" placeholder="请输入办公设备购置" @blur="validateFee('bg')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="专用设备购置" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zy">
              <a-input v-model="model.zy" placeholder="请输入专用设备购置" @blur="validateFee('zy')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="基础设施建设" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="jq">
              <a-input v-model="model.jq" placeholder="请输入基础设施建设" @blur="validateFee('jq')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="大型修缮" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="dx">
              <a-input v-model="model.dx" placeholder="请输入大型修缮" @blur="validateFee('dx')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="信息网络及软件购置更新" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="xx">
              <a-input v-model="model.xx" placeholder="请输入信息网络及软件购置更新" @blur="validateFee('xx')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="物资储备" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="wz">
              <a-input v-model="model.wz" placeholder="请输入物资储备" @blur="validateFee('wz')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="土地补偿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="td">
              <a-input v-model="model.td" placeholder="请输入土地补偿" @blur="validateFee('td')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="安置补助" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="az">
              <a-input v-model="model.az" placeholder="请输入安置补助" @blur="validateFee('az')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="地上附着物和青苗补偿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="dspz">
              <a-input v-model="model.dspz" placeholder="请输入地上附着物和青苗补偿" @blur="validateFee('dspz')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="拆迁补偿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="cq">
              <a-input v-model="model.cq" placeholder="请输入拆迁补偿" @blur="validateFee('cq')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="公务用车购置" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="gwc">
              <a-input v-model="model.gwc" placeholder="请输入公务用车购置" @blur="validateFee('gwc')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="其他交通工具购置" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="qt">
              <a-input v-model="model.qt" placeholder="请输入其他交通工具购置" @blur="validateFee('qt')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="文物和陈列品购置" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ww">
              <a-input v-model="model.ww" placeholder="请输入文物和陈列品购置" @blur="validateFee('ww')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="无形资产购置" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="wxzc">
              <a-input v-model="model.wxzc" placeholder="请输入无形资产购置" @blur="validateFee('wxzc')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="其他资本性支出" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zbxzc">
              <a-input v-model="model.zbxzc" placeholder="请输入其他资本性支出" @blur="validateFee('zbxzc')"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="基本收入总额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="jbsrze">
              <a-input v-model="model.jbsrze" placeholder="请输入基本收入总额"></a-input>
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
  </a-spin>
</template>

<script>
import { mapState } from 'vuex'
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'

export default {
  name: 'CwCzjbForm',
  components: {},
  props: {
    disabled: {
      type: Boolean,
      default: false,
      required: false
    }
  },
  data() {
    return {
      model: {
        nd: '', // 年度，字符串类型
        xmlx: '' // 项目类型
      },
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 },
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 },
      },
      confirmLoading: false,
      validatorRules: {
        nd: [
          { required: true, message: '请选择年度', trigger: 'change' }
        ],
        xmlx: [
          { required: true, message: '请选择项目类型', trigger: 'change' }
        ]
      },
      url: {
        add: "/cw/cwCzjb/add",
        edit: "/cw/cwCzjb/edit",
        queryById: "/cw/cwCzjb/queryById",
        list: "/cw/cwCzjb/list", // 项目数据接口
        deptList: "/cw/cwKs/list" // 科室数据接口
      },
      yearOptions: [], // 年份选项
      currentYearData: [], // 当前选中年份的项目数据缓存
      deptFeeSummary: {}, // 科室费用汇总数据
      isManualChange: false, // 标记是否手动修改过表单年度（复用成功代码）
      // 字段映射关系：cwKs字段 -> cwCzjb字段
      fieldMapping: {
        'bgf': 'bgf',         // 办公费
        'ys': 'ys',           // 印刷费
        'sx': 'sx',           // 手续费
        'sf': 'sf',           // 水费
        'df': 'df',           // 电费
        'yd': 'yd',           // 邮电费
        'qn': 'qn',           // 取暖费
        'wy': 'wy',           // 物业管理费
        'cl': 'cl',           // 差旅费
        'cg': 'cg',           // 因公出国（境）费用
        'wxf': 'wx',          // 维修（护）费 (cwKs是wxf，cwCzjb是wx)
        'zl': 'zl',           // 租赁费
        'hy': 'hy',           // 会议费
        'px': 'px',           // 培训费
        'gwjd': 'gwjd',       // 公务接待费
        'zycl': 'ztcl',       // 专用材料费 (cwKs是zycl，cwCzjb是ztcl)
        'bz': 'bz',           // 被装购置费
        'zyll': 'zyrl',       // 专用燃料费 (cwKs是zyll，cwCzjb是zyrl)
        'lw': 'lw',           // 劳务费
        'wt': 'wt',           // 委托业务费
        'gh': 'gh',           // 工会经费
        'gwc': 'gwc',         // 公务用车购置
        'qtjtfy': 'qtjt',     // 其他交通费用 (cwKs是qtjtfy，cwCzjb是qtjt)
        'sj': 'sj',           // 税金及附加费用
        'qtsp': 'qtsp',       // 其他商品和服务支出
        'fw': 'fw',           // 房屋建筑物购建
        'bg': 'bg',           // 办公设备购置
        'zy': 'zy',           // 专用设备购置
        'jc': 'jq',           // 基础设施建设 (cwKs是jc，cwCzjb是jq)
        'dx': 'dx',           // 大型修缮
        'xx': 'xx',           // 信息网络及软件购置更新
        'wz': 'wz',           // 物资储备
        'td': 'td',           // 土地补偿
        'az': 'az',           // 安置补助
        'ds': 'dspz',         // 地上附着物和青苗补偿 (cwKs是ds，cwCzjb是dspz)
        'cq': 'cq',           // 拆迁补偿
        'gw': 'gw',           // 公务用车运行维护费
        'ww': 'ww',           // 文物和陈列品购置
        'qtjt': 'qt',           // 其他交通工具购置
        'wx': 'wxzc',       // 无形资产购置
        'qt': 'zbxzc',     // 其他资本性支出
        // 移除基本收入总额的映射，使其不参与科室汇总计算
      },
      // 所有需要参与校验的费用字段（排除基本收入总额）
      feeFields: {
        'bgf': '办公费',
        'ys': '印刷费',
        'sx': '手续费',
        'sf': '水费',
        'df': '电费',
        'yd': '邮电费',
        'qn': '取暖费',
        'wy': '物业管理费',
        'cl': '差旅费',
        'cg': '因公出国（境）费用',
        'wx': '维修（护）费',
        'zl': '租赁费',
        'hy': '会议费',
        'px': '培训费',
        'gwjd': '公务接待费',
        'ztcl': '专用材料费',
        'bz': '被装购置费',
        'zyrl': '专用燃料费',
        'lw': '劳务费',
        'wt': '委托业务费',
        'gh': '工会经费',
        'gw': '公务用车运行维护费',
        'qtjt': '其他交通费用',
        'sj': '税金及附加费用',
        'qtsp': '其他商品和服务支出',
        'fw': '房屋建筑物购建',
        'bg': '办公设备购置',
        'zy': '专用设备购置',
        'jq': '基础设施建设',
        'dx': '大型修缮',
        'xx': '信息网络及软件购置更新',
        'wz': '物资储备',
        'td': '土地补偿',
        'az': '安置补助',
        'dspz': '地上附着物和青苗补偿',
        'cq': '拆迁补偿',
        'gwc': '公务用车购置',
        'qt': '其他交通工具购置',
        'ww': '文物和陈列品购置',
        'wxzc': '无形资产购置',
        'zbxzc': '其他资本性支出'
        // 排除基本收入总额
      },
      // 不需要参与校验的字段
      nonValidatedFields: ['jbsrze']
    }
  },
  computed: {
    formDisabled() {
      return this.disabled
    },
    // 判断当前是新增还是编辑状态
    isAdd() {
      return !this.model.id
    },
    // 完全复用成功代码的全局年度映射逻辑
    ...mapState({ globalYear: state => state.app.globalYear })
  },
  watch: {
    // 1. 监听全局年度变化（复用成功代码逻辑）
    globalYear(newVal) {
      if (!this.isManualChange) {
        this.model.nd = newVal; // 字段名保持 nd 与表单绑定一致
        // 可选：自动加载数据，与成功代码保持一致
        // this.handleYearChange(newVal);
      }
    },
    // 2. 监听表单年度变化（复用成功代码逻辑）
    'model.nd'(newVal, oldVal) {
      if (oldVal && newVal !== this.globalYear) {
        this.isManualChange = true; // 手动修改后不再同步
      }
    }
  },
  created() {
    // 复用成功代码：初始化时直接同步全局年度
    this.model.nd = this.globalYear;
    this.modelDefault = JSON.parse(JSON.stringify(this.model));
  },
  methods: {



    // 2. 年度选择变化处理（无需修改逻辑，适配新的年度格式）
    handleYearChange(year) {
      this.model.xmlx = '';
      this.fetchYearData(year);
      this.fetchDeptFeeData(year);
    },

    // 项目类型选择变化处理
    handleTypeChange(type) {
      const { nd } = this.model
      if (!nd) return

      const exists = this.currentYearData.some(item => item.xmlx === type)
      if (exists) {
        this.$message.warning(`当前年度已录入了${type}数据，请直接编辑`)
        const data = this.currentYearData.find(item => item.xmlx === type)
        this.model = { ...data }
      }
    },

    // 获取指定年份的项目数据
    fetchYearData(year) {
      this.confirmLoading = true
      getAction(this.url.list, {
        pageNo: 1,
        pageSize: 1000,
        nd: year
      }).then(res => {
        if (res.success && res.result) {
          this.currentYearData = res.result.records || []
        } else {
          this.$message.warning('获取项目数据失败：' + res.message)
          this.currentYearData = []
        }
      }).catch(err => {
        console.error('获取项目数据出错', err)
        this.$message.error('获取项目数据出错')
        this.currentYearData = []
      }).finally(() => {
        this.confirmLoading = false
      })
    },

    // 获取指定年份的科室费用数据并计算汇总
    fetchDeptFeeData(year) {
      this.confirmLoading = true
      getAction(this.url.deptList, {
        pageNo: 1,
        pageSize: 1000,
        nd: year
      }).then(res => {
        if (res.success && res.result) {
          this.calculateDeptFeeSummary(res.result.records || [])
        } else {
          this.$message.warning('获取科室费用数据失败：' + res.message)
          this.deptFeeSummary = {}
        }
      }).catch(err => {
        console.error('获取科室费用数据出错', err)
        this.$message.error('获取科室费用数据出错')
        this.deptFeeSummary = {}
      }).finally(() => {
        this.confirmLoading = false
      })
    },

    // 计算科室费用汇总（处理字段映射问题）
    calculateDeptFeeSummary(records) {
      const summary = {}
      // 初始化所有需要校验的费用字段为0
      Object.keys(this.feeFields).forEach(field => {
        summary[field] = 0
      })

      // 累加所有科室的费用，处理字段映射（仅处理需要校验的字段）
      records.forEach(dept => {
        Object.entries(this.fieldMapping).forEach(([deptField, formField]) => {
          // 只处理在feeFields中存在的字段（排除基本收入总额）
          if (this.feeFields[formField] && dept[deptField]) {
            // 提取逗号前的金额部分并转换为数字
            const amountStr = dept[deptField].split(',')[0]
            const amount = parseFloat(amountStr.replace(/,/g, '')) || 0
            summary[formField] += amount
          }
        })
      })

      this.deptFeeSummary = summary
    },

    // 验证费用是否符合要求
    validateFee(field) {
      // 1. 排除不需要校验的字段（如基本收入总额）
      if (this.nonValidatedFields.includes(field)) {
        return true
      }

      // 2. 如果没有科室汇总数据，不验证
      if (Object.keys(this.deptFeeSummary).length === 0) return true

      // 3. 获取当前项目类型和年度
      const { xmlx, nd, id } = this.model
      if (!xmlx || !nd) return true

      // 4. 计算相反类型已存在的项目费用总和
      const oppositeType = xmlx === '财政' ? '非财政' : '财政'
      const oppositeTypeItems = this.currentYearData.filter(
        item => item.xmlx === oppositeType
      )

      let oppositeSum = 0
      oppositeTypeItems.forEach(item => {
        oppositeSum += parseFloat(item[field] || 0)
      })

      // 5. 计算当前类型其他项目的费用总和（排除当前编辑项）
      const sameTypeOtherItems = this.currentYearData.filter(
        item => item.xmlx === xmlx && item.id !== id
      )

      let sameTypeOtherSum = 0
      sameTypeOtherItems.forEach(item => {
        sameTypeOtherSum += parseFloat(item[field] || 0)
      })

      // 6. 获取当前输入的费用
      const currentValue = parseFloat(this.model[field] || 0)

      // 7. 计算当前类型总费用（其他项目+当前输入）
      const currentTypeTotal = sameTypeOtherSum + currentValue

      // 8. 计算财政+非财政的总费用
      const totalSum = oppositeSum + currentTypeTotal

      // 9. 获取科室总费用（如果科室没有该费用数据，默认0）
      const deptTotal = this.deptFeeSummary[field] || 0

      // 10. 判断当前操作后会存在的项目类型数量
      const existingTypes = new Set(this.currentYearData.map(item => item.xmlx))
      const typesAfterOperation = new Set([...existingTypes])
      if (this.isAdd) {
        typesAfterOperation.add(xmlx) // 新增时将当前类型加入
      }
      const typeCount = typesAfterOperation.size

      // 11. 核心校验逻辑
      if (typeCount === 2) {
        // 两种类型存在时，总和必须等于科室总额（即使科室总额为0）
        if (totalSum !== deptTotal) {
          this.$message.error(`${this.feeFields[field]}总和必须等于科室总金额${deptTotal}，当前财政${xmlx === '财政' ? currentValue : oppositeSum}，非财政${xmlx === '非财政' ? currentValue : oppositeSum}，合计${totalSum}`)
          return false
        }
      } else {
        // 仅一种类型存在时，当前类型总额不能超过科室总额
        if (currentTypeTotal > deptTotal) {
          this.$message.error(`${this.feeFields[field]}不能大于科室总金额${deptTotal}，当前录入${currentTypeTotal}`)
          return false
        }
      }

      return true
    },

    add() {
      this.edit(this.modelDefault);
    },
    edit(record) {
      this.model = Object.assign({}, record);
      this.visible = true;
      // 如果编辑时有年度，加载对应数据
      if (this.model.nd) {
        this.fetchYearData(this.model.nd)
        this.fetchDeptFeeData(this.model.nd)
      }
    },
    // 9. 提交表单（修复年度提交格式：无需转字符串，直接提交“年一上/年二上”）
    submitForm() {
      const that = this;
      // 先验证所有需要校验的费用字段
      let allValid = true;
      Object.keys(this.feeFields).forEach(field => {
        if (!this.validateFee(field)) allValid = false;
      });
      if (!allValid) return;

      // 触发表单验证
      this.$refs.form.validate(valid => {
        if (valid) {
          that.confirmLoading = true;
          let httpurl = '';
          let method = '';
          if (!this.model.id) {
            httpurl += this.url.add;
            method = 'post';
          } else {
            httpurl += this.url.edit;
            method = 'put';
          }
          // 移除年度转字符串逻辑，直接提交“年一上/年二上”格式
          const submitData = { ...this.model };
          httpAction(httpurl, submitData, method).then((res) => {
            if (res.success) {
              that.$message.success(res.message);
              that.$emit('ok');
            } else {
              that.$message.warning(res.message);
            }
          }).finally(() => {
            that.confirmLoading = false;
          });
        }
      });
    },
    // submitForm() {
    //   const that = this;
    //   // 先验证所有需要校验的费用字段
    //   let allValid = true;
    //   Object.keys(this.feeFields).forEach(field => {
    //     if (!this.validateFee(field)) {
    //       allValid = false;
    //     }
    //   });

    //   if (!allValid) {
    //     return;
    //   }

    //   // 触发表单验证
    //   this.$refs.form.validate(valid => {
    //     if (valid) {
    //       that.confirmLoading = true;
    //       let httpurl = '';
    //       let method = '';
    //       if (!this.model.id) {
    //         httpurl += this.url.add;
    //         method = 'post';
    //       } else {
    //         httpurl += this.url.edit;
    //         method = 'put';
    //       }
    //       // 确保年度以字符串形式提交
    //       const submitData = {
    //         ...this.model,
    //         nd: this.model.nd.toString()
    //       }
    //       httpAction(httpurl, submitData, method).then((res) => {
    //         if (res.success) {
    //           that.$message.success(res.message);
    //           that.$emit('ok');
    //         } else {
    //           that.$message.warning(res.message);
    //         }
    //       }).finally(() => {
    //         that.confirmLoading = false;
    //       })
    //     }
    //   })
    // },
  }
}
</script>